package com.example.lt.result;

import lombok.Data;

import java.io.Serializable;

/**
 * @Author 小涛Tao
 * @Date: 2024/05/29/15:33
 * version 1.0 注释：后端统一返回结果
 **/
@Data
public class Result<T> implements Serializable {

    private int code; // 状态码

    private String message; // 返回信息

    private String type; // 显示提示框类型

    private Boolean success; // 是否成功

    private T data; // 数据

    /**
     * 请求成功并返回成功信息
     * @param message 信息
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(String message) {
        Result<T> result = new Result<T>();
        result.setCode(200);
        result.setMessage(message);
        result.setType("success");
        result.setSuccess(true);
        result.setData(null);
        return result;
    }

    /**
     * 请求成功并返回成功信息和数据
     * @param message 信息
     * @param object 数据
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(String message, T object) {
        Result<T> result = success(message);
        result.setData(object);
        return result;
    }

    /**
     * 请求成功并只返回数据
     * @param object 数据
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(T object) {
        Result<T> result = success("");
        result.setData(object);
        return result;
    }

    /**
     * 请求错误并返回错误信息
     * @param message 信息
     * @return
     * @param <T>
     */
    public static <T> Result<T> error(String message) {
        Result<T> result = success(message);
        result.setSuccess(false);
        result.setType("error");
        return result;
    }

    /**
     * 请求警告并返回警告信息
     * @param message 信息
     * @return
     * @param <T>
     */
    public static <T> Result<T> warning(String message) {
        Result<T> result = error(message);
        result.setSuccess(false);
        result.setType("warning");
        return result;
    }

    /**
     * 请求失败并返回失败信息
     * @param message 信息
     * @return
     * @param <T>
     */
    public static <T> Result<T> fatal(String message) {
        Result<T> result = error(message);
        result.setCode(500);
        return result;
    }

}
